package top.jiangqiang.seataservice1;

import io.seata.spring.annotation.GlobalTransactional;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class SeataService1Controller {
    private final AccountRepository accountRepository;
    private final FeignService feignService;

    /**
     * 此方法中直接操作了数据库，同时通过微服务远程调用间接操作了另一个数据库。
     * 两个数据库也可以是同一个。
     * 然后使用 @GlobalTransactional注解，可以实现分布式事务，两个数据库中的数据要么同时修改，要么同时不修改。
     *
     * @return
     */
    @GetMapping("/")
    @GlobalTransactional
    public String test() {
        //在当前服务中修改数据库中的数据。
        int i = accountRepository.decreaseAmount(1L);
        //通过feign远程调用另一个服务，操作数据库中的数据。
        feignService.decreaseStockCount();
        //模拟异常
        System.out.println(1 / 0);
        return "ok";
    }
}
